package co.edu.uniquindio.sicorrespondencia.entities;

import java.io.Serializable;
import javax.persistence.*;

import org.jboss.seam.annotations.Name;

import java.util.Date;

/**
 * Esta entidad representa el estudiante y sus datos correspondientes Esta es
 * una de las entidades mas importantes de la aplicacion ya que representa los
 * estudiantes que se encuentran realizando un trabajo de grado y que al termino
 * de este estaran proximos a graduarse
 * 
 * @author Tannia Rosero
 * @author Sofia Agudelo
 * 
 */
@Entity
@Table(name = "estudiante")
@Name("estudiante")
@NamedQueries( {
	@NamedQuery(name = "pasantesPorEmpresa", query = "SELECT est FROM Estudiante est LEFT JOIN est.trabajoGrado tg " +
				"LEFT JOIN tg.empresaTG emp WHERE emp =:empresa ") 
})
public class Estudiante implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "idEstudiante")
	private Long idEstudiante;

	@Column(name = "apellidoEstudiante")
	private String apellidoEstudiante;

	@Column(name = "codigoEstudiante")
	private int codigoEstudiante;

	@Column(name = "direccionEstudiante")
	private String direccionEstudiante;

	@Column(name = "emailEstudiante")
	private String emailEstudiante;

	@Temporal(TemporalType.DATE)
	@Column(name = "finalizacionAsignaturas")
	private Date finalizacionAsignaturas;

	@Temporal(TemporalType.DATE)
	@Column(name = "inicioAsignaturas")
	private Date inicioAsignaturas;

	@Column(name = "nombreEstudiante")
	private String nombreEstudiante;

	@Column(name = "sexoEstudiante")
	private String sexoEstudiante;

	@Column(name = "telefonoEstudiante")
	private int telefonoEstudiante;

	// bi-directional many-to-one association to TrabajoGrado
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "idTG")
	private TrabajoGrado trabajoGrado;

	// bi-directional many-to-one association to Municipio
	@ManyToOne(fetch = FetchType.LAZY)
	private Municipio municipioEstudiante;

	public Estudiante() {
	}

	/**
	 * Este metodo permite obtener idEstudiante de la clase
	 * 
	 * @return el idEstudiante
	 */
	public Long getIdEstudiante() {
		return idEstudiante;
	}

	/**
	 * Este metodo permite fijar el idEstudiante de la entidad
	 * 
	 * @param idEstudiante
	 *            es el idEstudiante a fijar
	 */
	public void setIdEstudiante(Long idEstudiante) {
		this.idEstudiante = idEstudiante;
	}

	/**
	 * Este metodo permite obtener apellidoEstudiante de la clase
	 * 
	 * @return el apellidoEstudiante
	 */
	public String getApellidoEstudiante() {
		return apellidoEstudiante;
	}

	/**
	 * Este metodo permite fijar el apellidoEstudiante de la entidad
	 * 
	 * @param apellidoEstudiante
	 *            es el apellidoEstudiante a fijar
	 */
	public void setApellidoEstudiante(String apellidoEstudiante) {
		this.apellidoEstudiante = apellidoEstudiante;
	}

	/**
	 * Este metodo permite obtener codigoEstudiante de la clase
	 * 
	 * @return el codigoEstudiante
	 */
	public int getCodigoEstudiante() {
		return codigoEstudiante;
	}

	/**
	 * Este metodo permite fijar el codigoEstudiante de la entidad
	 * 
	 * @param codigoEstudiante
	 *            es el codigoEstudiante a fijar
	 */
	public void setCodigoEstudiante(int codigoEstudiante) {
		this.codigoEstudiante = codigoEstudiante;
	}

	/**
	 * Este metodo permite obtener direccionEstudiante de la clase
	 * 
	 * @return el direccionEstudiante
	 */
	public String getDireccionEstudiante() {
		return direccionEstudiante;
	}

	/**
	 * Este metodo permite fijar el direccionEstudiante de la entidad
	 * 
	 * @param direccionEstudiante
	 *            es el direccionEstudiante a fijar
	 */
	public void setDireccionEstudiante(String direccionEstudiante) {
		this.direccionEstudiante = direccionEstudiante;
	}

	/**
	 * Este metodo permite obtener emailEstudiante de la clase
	 * 
	 * @return el emailEstudiante
	 */
	public String getEmailEstudiante() {
		return emailEstudiante;
	}

	/**
	 * Este metodo permite fijar el emailEstudiante de la entidad
	 * 
	 * @param emailEstudiante
	 *            es el emailEstudiante a fijar
	 */
	public void setEmailEstudiante(String emailEstudiante) {
		this.emailEstudiante = emailEstudiante;
	}

	/**
	 * Este metodo permite obtener finalizacionAsignaturas de la clase
	 * 
	 * @return el finalizacionAsignaturas
	 */
	public Date getFinalizacionAsignaturas() {
		return finalizacionAsignaturas;
	}

	/**
	 * Este metodo permite fijar el finalizacionAsignaturas de la entidad
	 * 
	 * @param finalizacionAsignaturas
	 *            es el finalizacionAsignaturas a fijar
	 */
	public void setFinalizacionAsignaturas(Date finalizacionAsignaturas) {
		this.finalizacionAsignaturas = finalizacionAsignaturas;
	}

	/**
	 * Este metodo permite obtener inicioAsignaturas de la clase
	 * 
	 * @return el inicioAsignaturas
	 */
	public Date getInicioAsignaturas() {
		return inicioAsignaturas;
	}

	/**
	 * Este metodo permite fijar el inicioAsignaturas de la entidad
	 * 
	 * @param inicioAsignaturas
	 *            es el inicioAsignaturas a fijar
	 */
	public void setInicioAsignaturas(Date inicioAsignaturas) {
		this.inicioAsignaturas = inicioAsignaturas;
	}

	/**
	 * Este metodo permite obtener nombreEstudiante de la clase
	 * 
	 * @return el nombreEstudiante
	 */
	public String getNombreEstudiante() {
		return nombreEstudiante;
	}

	/**
	 * Este metodo permite fijar el nombreEstudiante de la entidad
	 * 
	 * @param nombreEstudiante
	 *            es el nombreEstudiante a fijar
	 */
	public void setNombreEstudiante(String nombreEstudiante) {
		this.nombreEstudiante = nombreEstudiante;
	}

	/**
	 * Este metodo permite obtener sexoEstudiante de la clase
	 * 
	 * @return el sexoEstudiante
	 */
	public String getSexoEstudiante() {
		return sexoEstudiante;
	}

	/**
	 * Este metodo permite fijar el sexoEstudiante de la entidad
	 * 
	 * @param sexoEstudiante
	 *            es el sexoEstudiante a fijar
	 */
	public void setSexoEstudiante(String sexoEstudiante) {
		this.sexoEstudiante = sexoEstudiante;
	}

	/**
	 * Este metodo permite obtener telefonoEstudiante de la clase
	 * 
	 * @return el telefonoEstudiante
	 */
	public int getTelefonoEstudiante() {
		return telefonoEstudiante;
	}

	/**
	 * Este metodo permite fijar el telefonoEstudiante de la entidad
	 * 
	 * @param telefonoEstudiante
	 *            es el telefonoEstudiante a fijar
	 */
	public void setTelefonoEstudiante(int telefonoEstudiante) {
		this.telefonoEstudiante = telefonoEstudiante;
	}

	/**
	 * Este metodo permite obtener trabajoGrado de la clase
	 * 
	 * @return el trabajoGrado
	 */
	public TrabajoGrado getTrabajoGrado() {
		return trabajoGrado;
	}

	/**
	 * Este metodo permite fijar el trabajoGrado de la entidad
	 * 
	 * @param trabajoGrado
	 *            es el trabajoGrado a fijar
	 */
	public void setTrabajoGrado(TrabajoGrado trabajoGrado) {
		this.trabajoGrado = trabajoGrado;
	}

	/**
	 * Este metodo permite obtener municipioEstudiante de la clase
	 * 
	 * @return el municipioEstudiante
	 */
	public Municipio getMunicipioEstudiante() {
		return municipioEstudiante;
	}

	/**
	 * Este metodo permite fijar el municipioEstudiante de la entidad
	 * 
	 * @param municipioEstudiante
	 *            es el municipioEstudiante a fijar
	 */
	public void setMunicipioEstudiante(Municipio municipioEstudiante) {
		this.municipioEstudiante = municipioEstudiante;
	}

}